package top.yxqz.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import top.yxqz.springmvc.pojo.Dog;

import javax.servlet.http.HttpServletRequest;

/**
 * @author: 余小小
 * @date: 2023/4/25
 * @description： 获取请求参数的几种方式
 * 1. 使用Servlet的方式获取，以前在JavaWeb阶段的方式获取
 * 2. @requestParam注解
 * 3. @RequestHeader注解：将header和形参进行绑定
 * 4. @CookieValue注解：将cookie数据和控制方法进行绑定
 */
@Controller
@RequestMapping("/param")
public class GetParamsController {
    /**
     * 1.使用Servlet的方式获取请求参数(HttpServletRequest)
     * url:/param/servlet
     *
     * @return
     */
    @GetMapping("/servlet")
    public String oldGetParam(HttpServletRequest request) {
        String username = request.getParameter("username");
        System.out.println("username = " + username);
        return "hello";
    }

    /**
     * 2.使用requestParam注解和参数进行绑定（最常用）
     * url:/param/requestParam
     *
     * @return
     */
    @PostMapping("/requestParam")
    public void requestParamGetParam(@RequestParam("username") String username) {
        System.out.println("username(requestParam) = " + username);
    }

    /**
     * 3.获取请求头中的数据
     */
    @PostMapping("/requestheader")
    public String requestHeaderGetParam(@RequestHeader("host") String host) {
        System.out.println("主机（host)" + host);
        return "hello";
    }

    /**
     * 4.获取cookie中的数据
     * @param k8s_value
     * @return
     */
    @GetMapping("/cookie")
    public String cookieGetParam(@CookieValue("Idea-b06a5d26") String k8s_value) {
        System.out.println("k8s_value = " + k8s_value);
        return "hello";
    }

    /**
     * 5.使用对象获取数据（最常用的方式）
     * 前提：前端在传入数据的时候，name值（参数的名字）必须和对象的字段一模一样
     * @param dog
     * @return
     */
    @PostMapping("/object")
    public String objectGetParam(Dog dog) {
        System.out.println(dog);
        return "hello";
    }
}
